#ifndef __Keyboard_PS2_h__
#define __Keyboard_PS2_h__

#include "stm_std_lib.h"
#include "es_gpio.h"
#include "keyboard_define.h"



/************************************************************************/
/*       

PS2键盘驱动程序
!!Keyboard_PS2.cpp中已定义keyboard_ps2键盘对象实例!!
应使用getKeyboard()获取键盘的唯一实例

PB0接PS2的CLK
PB10接PS2的DATA

当PS2使用GPIO与本设定不同，需要修改时，应将Keyboard_PS2.h和Keyboard_PS2.cpp复制到本地目录再添加引用

*/
/************************************************************************/




/************************************************************************/
/* 键盘事件观察者                                                       */
/************************************************************************/
class KeyboardEventListener {
public:
	//按键事件处理函数
	virtual void OnKeyPress(KeyEventArgs e) = 0;
};


/************************************************************************/
/* PS2键盘                                                      */
/************************************************************************/
class Keyboard_PS2 {
public:
	//应使用getKeyboard()获取键盘的唯一实例
	Keyboard_PS2();
	~Keyboard_PS2();

	//初始化,传入KeyboardEventListener派生类观察者
	void Init(KeyboardEventListener* pListener);


	//由中断使用-键盘CLK时钟事件
	void clkEvent();


	
private: 
	es_Gpio* m_pGPIOB;
	KeyboardEventListener* m_pListener;

	vu8 kbBitCnt;
	vu8 kbData;
	vu8 kbKey;

};

//获取键盘唯一实例
Keyboard_PS2* getKeyboard();



#endif // !__Keyboard_PS2_h__

